import javax.xml.transform.Source;

/**
 * @Description: 反转字符串 II
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，
 * 每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，
 * 则反转前 k 个字符，其余字符保持原样。
 * @Date:Create in 19:40  2022/7/6
 */
public class reverseStr0541 {

    public static void main(String[] args) {
        String s = "a";
//        StringBuffer str = new StringBuffer(s);
//        swapStr(str,0,1);
//        System.out.println(str);
        String ss = reverseStr1(s, 2);
        System.out.println(ss);
    }

    //暴力解法
    public static String reverseStr1(String s, int k) {
        StringBuffer str = new StringBuffer(s);
        int left = 0, right = k - 1;
        int a = 0, b = 0;
        int size = str.length();
//        System.out.println(size);

        while (a < size) {
//            System.out.println(a);
            if ((a) % (2 * k) == 0) {
                b++;
//                System.out.println("a:"+a);
//                System.out.println("*********");
//                System.out.println("left:"+left);
//                System.out.println("left:"+right);
//                System.out.println("*********");
                if (size <= right) {
                    right = size-1;
                    System.out.println(right);
                    swapStr(str, left, right);
                }else{
                    swapStr(str, left, right);
                    left = b * 2 * k;
                    right = b * 2 * k + k - 1;
                }
            }
            a++;
        }

        return str.toString();
    }

    public static void swapStr(StringBuffer s, int l, int r) {
//        char temp1;
        while (l < r) {
            char temp1 = s.charAt(l);
            char temp2 = s.charAt(r);
            s.replace(r, r + 1, String.valueOf(temp1));
            s.replace(l, l + 1, String.valueOf(temp2));
            l++;
            r--;
        }
    }

    //每隔2k个反转前k个，尾数不够k个时候全部反转
    public static String reverseStr2(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k){
            int start = i;
            int end = Math.min(ch.length-1,start+k-1);

            while(start<end){
                ch[start] ^=ch[end];
                ch[end] ^= ch[start];
                ch[start] ^= ch[end];
                start++;
                end--;
            }
        }
        return new String(ch);
    }

}
